The present invention relates to methods of data encoding. In particular, the present invention relates to a method of encoding data for error correction and decoding error encoded data.
The communication of data intensive information has increased with the advent of wireless and internet technologies, and consequently, consumers and businesses are demanding increased speed and accuracy in their data communication systems.
Wireless mediums such as digital cellular and satellite communications channels are inherently noisy, resulting in transmissions having a large number of errors. Re-transmission of the data is typically required, reducing system performance and efficient use of available bandwidth.
A solution that has been used for several years to enable efficient, high quality data communication over noisy channels is forward error correction codes (FEC). FEC technology adds redundant information to a data stream, to enable a receiver to identify and correct errors without the need for re-transmission of data. The correcting process is called forward error correction because the receiving decoder only uses the information received and never requests a re-transmission, hence the flow of data is always moving forward. FEC coding of data is typically performed in the modulator of a communication system, and decoding of the encoded data is typically performed in the demodulator of the system.
Included among the types of FEC codes are low-density parity-check (LDPC) codes and turbo-codes, for example. Specific classes of LDPC codes have been investigated by R. G. Gallager in the paper titled xe2x80x9cLow-density parity-check codesxe2x80x9d, in IRE Transactions on Information Theory, pp. 21-28, January 1962, J. Lodge et al. in the paper titled xe2x80x9cThe decoding of multi-dimensional codes using separable MAP xe2x80x98filtersxe2x80x99xe2x80x9d in Proc. 16th Biennial Symp. On Commun., Kingston, Canada, pp. 343-346, May 1992, A. Hunt et al. in the paper titled xe2x80x9cHyper-codes: High-performance low-complexity error-correcting codesxe2x80x9d in Proc. 19th Biennial Symp. On Commun., Kingston, Canada, pp. 263-267, May 1998, and D. Rankin et al. in the paper titled xe2x80x9cRandomly interleaved single parity check codesxe2x80x9d in Proc. IEEE Pacific Rim Conference on Communications, Computers and Signal Processing, Victoria, pp. 420-423, Aug. 1999. Many LDPC codes are well suited to high code-rate applications, as compared to turbo codes, as presented by C. Berrou et al. in the paper titled xe2x80x9cNear optimum error-correcting coding and decoding: Turbo codesxe2x80x9d IEEE Trans. On Commun., vol. 44, no. 10, pp. 1261-1271, October 1996. Turbo codes excel at low to moderate code rates when the signal-to-noise ratio (SNR) is also low to moderate, but can experience a flattening, or flaring of the bit-error rate (BER) curve at SNRs that limit the ultimate power efficiency for very low packet-error rate applications. This flaring is due to the existence of low-weight code words.
Fundamentally, FEC technology is a type of error-correction code. An error-correction code is a method of coding information messages in a manner that incorporates redundancy. By exploiting this redundancy, a decoder for an error-correcting code is able to provide error-correcting and/or detecting functionality. However, redundancy as incorporated within error-correction codes does not necessarily imply an exact duplication of data.
Herein, the term error-correction code, referred to as a code from this point forward, is defined as a mapping of information messages to code words, each code word being an ordered collection of symbols from some finite symbol set. Each code word of a code has the same code word length. A symbol set is a collection of distinct identifiers, such as {0 1} or {1 xcex2 xcex22 xcex23}. The code words of a code form a proper subset of all possible ordered collection of symbols from the symbol set, and the collections of a size are equal to the code word length. Some ordered collections of symbols from the symbol set are code words of the code, and others are not, and this is what provides the required redundancy.
The symbol set of the code has an associated operator, called addition, defined over the elements of the symbol set, with one of the symbols in the symbol set being the identity element for the addition operator. Further, each element must have an inverse and the addition operator must be commutative, in other words, the operator is insensitive to the ordering of the operands. For example, a+b=b+a. In mathematical terms, the symbol set together with the addition operator form an abelian group.
Typically, a set of constraints determines which ordered collections of symbols are code words of a code and which are not. The constraints are expressed in terms of one or more operators that are associated with the symbol set. Highly structured constraints are usually desirable to enable simple encoding and decoding of a code. The constraints are usually defined over groups or fields, which have well-known mathematical properties.
A code where the information message is part of the code word itself is called a systematic code. That is, with a systematic code, the information messages are expressed in terms of the same symbol set used for the code words themselves, and the symbols of the information message appear within the associated code word, in some arbitrary but fixed placement pattern.
Block codes are codes having a finite code word length. Linear codes are identified when the sum of every pair of code words is a code word. Binary codes have symbols that are bits, such as 0 and 1. A product code is a code constructed from two or more codes, called component codes of the product code, which are combined in an orthogonal manner. Specifically, an N-dimensional product code is a code composed of N component codes, where each code word of the product code can be represented as an N-dimensional array of symbols. For any selected dimension and any set of valid indices for other dimensions, the ordered collection of symbols determined by moving along the selected dimension while keeping the indices of the other dimensions fixed, is a code word of the component code associated with the selected dimension. It is noted that a component code of a product code may itself be a product code.
Parity is a well-known method of applying constraints for coding. Using even-parity with bits, a constraint exists that a set of symbols sums modulo-2 to 0. For example, a set of message information bits {1 0} are encoded as the code word {1 0 1 }, and a set of message information bits {1 1 } are encoded as the code word {1 1 0}. Even-parity with bits, in the binary case, is a special case of sum-to-identity parity for general symbol sets.
Error correcting capability can be improved by creating larger, more powerful codes. A method of creating a larger and more powerful code from one or two linear component codes is to arrange the message information symbols in a rectangular array, or matrix, and then form a product code by applying parity equations along the rows and columns of the array. More specifically, one set of parity equations, called row parity equations, corresponding to the row component code is applied along the rows and a second set of parity equations, called column parity equations, corresponding to the column component code is applied along the columns resulting from the application of the first set of parity equations. The resulting two-dimensional product codes have a minimum distance equal to the product of the minimum distances of the row and column component codes, and the arithmetic difference patterns between two product code words are linear combinations of simple rectangular (i.e., weight 4) patterns. Additional dimensions could be added by stacking the product code words of the message information array to form a 3-dimensional array. Then, a third set of parity equations could be applied straight through the third dimension to form a 3-dimensional product code. In other words, a rectangular pattern in one two-dimensional product code word can match up with a rectangular pattern in another two-dimensional product code word
As a simple example of a product code, consider a two-dimensional binary product code where each of two component codes are even-parity codes with a code word length of 3. The following collection of bits is a valid code word for such a product code:             1              0              1                  0              1              1                  1              1              0      
Observe that each row and each column has even parity. This product code has only 16 distinct code words. Each code word has a code word length of 9. It is apparent that without constraints, there are 29, or 512 possible ordered collections of bits of length 9.
As previously mentioned, further dimensions can be added to the product code to improve the error correcting capability of existing product codes. For example, the two-dimensional product code shown above has a minimum Hamming distance of 4, in which a minimum of 4 bits must be changed within a product code word to produce another valid product code word. By adding a third dimension of even-parity encoding with code word length of 3, the minimum Hamming distance is increased to 8. This larger Hamming distance is indicative of more powerful error-correcting capabilities. However, in order to achieve this increased error-correcting capability, 19 of 27 bits within the product code word are devoted to parity information. In the two-dimensional product code shown above, nearly half the bits are information, whereas in the three-dimensional product code, less than one third of the bits is information bits. In this example, the percentage of information bits within a code word drops significantly when an additional dimension is added to the product code. In order to increase this percentage, an increased amount of information bits is required, which is also a potential limitation to most systems.
Many linear codes, and all binary linear codes, can be defined by a set of sum-to-identity parity equations, where each parity equation is applied to a distinct subset of symbols in the code word.
Although product coding for coding source data provides good error-correction capability, conventional product coding techniques have some disadvantages. An increase in the number of dimensions of a product code is accompanied by a significant increase in the block size, and a significant drop in the code rate. The block size is a measure of the amount of message information associated with each code word and the code rate is a measure of the overhead of a code. Therefore, conventional product coding techniques can provide greater error-correcting capabilities, but at the expense of block size and code rates which contribute to a decrease in the overall system performance. For a given block size and code rate, there are many other codes that can provide error-correcting capabilities superior to that of block codes.
Once the data has been encoded and transmitted, a receiving station must decode the data to be used. Product codes are often decoded using a posteriori probability (APP) processing, or approximations thereof, applied in an iterative manner.
Initially, the decoder is passed soft decisions from the detector, which is a device that detects the signal received over an unreliable channel. The received signal can consist of elements of a symbol set. Soft decisions are a set of real numbers that is indicative of the confidence that the corresponding element in a symbol set was the one that was transmitted, for each symbol interval in the received signal. Typically, the greater the magnitude of the soft decision, the more likely it is that the corresponding symbol was the one originally transmitted. The prior art iterative decoding methods attempt to improve these soft decisions by taking advantage of the structure of the code on a component code by component code basis. When the iterative decoding is successful, it will converge to a code word within a given maximum number of iterations. That is, after the maximum number of iterations is completed, a valid code word is obtained by choosing the symbol with the highest confidence in each symbol interval. Unfortunately, prior art iterative decoding methods can result in decoding errors or decoding failures. A decoding error occurs in the case where the iterative processing has converged to an incorrect code word. A decoding failure occurs in the case where the iterative processing has not converged to a code word. This condition can be detected because the parity equations have not been satisfied. In a practical implementation, an on-chip convergence test can be run to determine that further iterations are not beneficial, such as by comparing signal to noise ratio""s between current and previous iterations for example. Although re-transmission of the data is possible when decoding has failed, this option is not always practical. Therefore, while conventional iterative decoding methods are well suited to decode powerful codes, they sometimes result in decoding failures. When these decoding failures occur, it may be possible to recover the correct code word some of the time.
It is therefore desirable to provide an improved product coding method that has greater error-correcting capability than conventional product codes for a given block size and code rate.
It is further desirable to provide an improved method for recovering valid code words following a decoding failure when using iterative decoding methods.
It is an object of the present invention to provide an improved product coding method that has greater error-correcting capability than conventional product codes for a given block size and code rate, and to provide an improved method for recovering valid code words following a decoding failure when using iterative decoding methods.
In a first aspect, the present invention provides a method for error correction encoding of source data elements. The method includes determining quadratic residues of p and storing the quadratic residues of p in a memory, where p is a prime number greater than 3 and determining if (pxe2x88x921)/2 is an element of the set of quadratic residues of p. Depending on the determination, one or more sets of skew parameters based on the determination of the element are selected. The method further includes the following steps of forming symbol subsets based upon the rows, columns and one or more skew mapping paths through a 3-dimensional array, applying the parity constraints to the symbol subsets to form a parity check matrix, and generating a composite code generator matrix from the parity check matrix. In presently preferred embodiments, the step of selecting one or more sets of skew parameters includes selecting one skew parameter or all skew parameters of the at least one or more sets of skew parameters from the set of quadratic residues of p. In yet another preferred embodiment, the step of selecting one or more sets of skew parameters includes selecting all skew parameters of the at least one or more sets of skew parameters from outside the set of quadratic residues of p. In a further aspect of the present embodiment, the step of applying includes applying the parity constraints only to the rows and the third dimension of the array. In yet another aspect of the present embodiment, the step of selecting includes selecting different skew parameters between one set and another set of the skew parameters. According to alternate aspects of the present embodiment, size of the code word is reduced by shortening or by puncturing.
In a further aspect, shorter component codes are used with the skew mappings by eliminating selected parity squares prior to applying the parity constraints. In another aspect, the at least one group of symbol subsets is given by
[{A(s,r*s,i,c*s,i)}sxcex5Ji|r=0 . . . pxe2x88x921, c=0 . . . pxe2x88x921], 
where Ji is an index set defining a subset of parity squares for the ith component code which uses the mapping       [                                        r                          s              ,              i                        *                                                            c                          s              ,              i                        *                                ]    =                              G          i                ⁡                  (          s          )                    ⁡              [                                            r                                                          c                                      ]              +                  v        i            ⁡              (        s        )            
where Gi(s) is a nonsingular matrix in mod-p arithmetic and vi(s) is a vector.
In a further aspect, there is provided a method for decoding received data elements representing source data elements, which uses as input values the soft decisions output from an iterative decoder. The method includes the steps of determining the maximum absolute value of the soft decisions for each symbol, reordering the columns of the parity check matrix in decreasing order of absolute values and reducing the parity check matrix rows and columns beginning with the last column until a number of columns equal to the matrix rank, nxe2x88x92k, have been reduced, using a one from the rightmost unprocessed column that is not all zero. The method then proceeds with the steps of forming the pseudo-systematic code generator matrix that corresponds to the reduced parity check matrix, selecting at least one pseudo-input-data word based upon the post-iterative-decoding of soft decisions, and generating entire code words that correspond to the at least one of the pseudo-input-data word and storing the code words in a memory. A code word is selected that is most similar to the pre-iterative-decoded soft decisions and the decoded source data is extracted from the systematic positions of the decoded code word.
In another aspect, there is provided a method for decoding product codes including the steps of passing soft decision data to a decoder, iteratively decoding the soft decision data until there is convergence to a code word, and incrementing a counter after each decoding iteration, and terminating iterative decoding when there is convergence to a code word, or when the counter reaches a pre-set value, or when the decoder has failed to converge to a code word. Finally, when the counter value equals a set maximum value or when the decoder fails to converge to a code word, the method of the present aspect decodes the soft decision data according to the previously described method for decoding received data elements representing source data elements, which uses as input values the soft decisions output from an iterative decoder. In a presently preferred embodiment, the step of terminating iterative decoding includes determining that the decoded data has converged to a code word when all of the parity constraints are satisfied.
According to a further aspect of the present invention, there is provided an error correction encoder. The error correction encoder includes a quadratic residue calculator, a memory, a skew parameter unit, a parity constraints generator, a composite code generator, and a data encoder. The quadratic residue calculator generates quadratic residues of a prime number p, where p greater than 3. The memory stores the quadratic residues of the prime number p. The skew parameter unit selects from the set of quadratic residues skew mapping parameters based on a determination of (pxe2x88x921)/2 being an element of the set of quadratic residues. The parity constraints generator generates a parity check matrix based upon the skew mapping parameters. The composite code generator produces a generator matrix from the parity check matrix. The data encoder receives source data and the generator matrix for providing a code word.
In yet another aspect, there is provided a decoder. The decoder includes an iterative decoder, an absolute value calculator, a matrix modifier engine, a code generator engine, a memory, a code word comparator, and a data extractor. The iterative decoder receives soft decisions and provides improved soft decisions based upon the parity structure of the code. The absolute value calculator computes the maximum absolute value of the soft decisions from the iterative decoder for each symbol time. The matrix modifier engine reduces rows and columns of a parity check matrix. The code generator engine receives the reduced parity check matrix and at least one pseudo-input-data word for generating code words corresponding to the pseudo-input-data word. The memory stores the code words. The code word comparator provides a code word that is most similar to the pre-iterative-decoded soft decisions. The data extractor decodes the code word and provides source data.